﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {
        public static EmpresaVO getEmpresa(int idEmpresa)
        {
            List<EmpresaVO> listEmpresaVOs = getEmpresas(idEmpresa);
            if (listEmpresaVOs != null && listEmpresaVOs.Count > 0)
                return listEmpresaVOs[0];
            else
                return null;
        }

        public static List<EmpresaVO> getEmpresas()
        {
            return getEmpresas(null);
        }
        public static List<EmpresaVO> getEmpresas(int? idEmpresa)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdEmpresa, CNPJ, IE, IM, Nome, NomeTicket, Endereco, EnderecoNumero, Complemento, Bairro, Cidade, UF, Pais, SMS, Email, Telefone1, Telefone2, Telefone3, Ativo, Contato, Responsavel");
            query.AppendLine("FROM empresa ");
            if (idEmpresa != null)
                query.AppendLine("WHERE IdEmpresa=?IdEmpresa ");
            query.AppendLine("ORDER BY Nome ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idEmpresa != null) cmd.Parameters.AddWithValue("?IdEmpresa", idEmpresa);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<EmpresaVO> listEmpresa = new List<EmpresaVO>();

                while (reader.Read())
                {
                    EmpresaVO empresaVO = EmpresaVO.CreateEmpresaVO();
                    empresaVO.idEmpresa = reader.GetInt32("IdEmpresa");
                    empresaVO.CNPJ = reader.GetString("CNPJ");
                    empresaVO.IE = reader.GetString("IE");
                    empresaVO.IM = reader.GetString("IM");
                    empresaVO.nome = reader.GetString("Nome");
                    empresaVO.nomeTicket = reader.GetString("NomeTicket");
                    empresaVO.endereco = reader.GetString("Endereco");
                    empresaVO.enderecoNumero = reader.GetString("EnderecoNumero");
                    empresaVO.complemento = reader.GetString("Complemento");
                    empresaVO.bairro = reader.GetString("Bairro");
                    empresaVO.cidade = reader.GetString("Cidade");
                    empresaVO.UF = reader.GetString("UF");
                    empresaVO.pais = reader.GetString("Pais");
                    empresaVO.SMS = reader.GetString("SMS");
                    empresaVO.email = reader.GetString("Email");
                    empresaVO.telefone1 = reader.GetString("Telefone1");
                    empresaVO.telefone2 = reader.GetString("Telefone2");
                    empresaVO.telefone3 = reader.GetString("Telefone3");
                    empresaVO.ativo = reader.GetBoolean("Ativo");
                    empresaVO.contato = reader.GetString("Contato");
                    empresaVO.responsavel = reader.GetString("Responsavel");

                    listEmpresa.Add(empresaVO);
                }
                reader.Close();
                return listEmpresa;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setEmpresa(EmpresaVO empresaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE empresa ");
            query.AppendLine("SET CNPJ=?CNPJ, IE=?IE, IM=?IM, Nome=?Nome, NomeTicket=?NomeTicket, Endereco=?Endereco, EnderecoNumero=?EnderecoNumero, Complemento=?Complemento, Bairro=?Bairro, Cidade=?Cidade, UF=?UF, Pais=?Pais, SMS=?SMS, Email=?Email, Telefone1=?Telefone1, Telefone2=?Telefone2, Telefone3=?Telefone3, Ativo=?Ativo, Contato=?Contato, Responsavel=?Responsavel ");
            query.AppendLine("WHERE IdEmpresa=?IdEmpresa ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdEmpresa", empresaVO.idEmpresa);
            cmd.Parameters.AddWithValue("?CNPJ", empresaVO.CNPJ);
            cmd.Parameters.AddWithValue("?IE", empresaVO.IE);
            cmd.Parameters.AddWithValue("?IM", empresaVO.IM);
            cmd.Parameters.AddWithValue("?Nome", empresaVO.nome);
            cmd.Parameters.AddWithValue("?NomeTicket", empresaVO.nomeTicket);
            cmd.Parameters.AddWithValue("?Endereco", empresaVO.endereco);
            cmd.Parameters.AddWithValue("?EnderecoNumero", empresaVO.enderecoNumero);
            cmd.Parameters.AddWithValue("?Complemento", empresaVO.complemento);
            cmd.Parameters.AddWithValue("?Bairro", empresaVO.bairro);
            cmd.Parameters.AddWithValue("?Cidade", empresaVO.cidade);
            cmd.Parameters.AddWithValue("?UF", empresaVO.UF);
            cmd.Parameters.AddWithValue("?Pais", empresaVO.pais);
            cmd.Parameters.AddWithValue("?SMS", empresaVO.SMS);
            cmd.Parameters.AddWithValue("?Email", empresaVO.email);
            cmd.Parameters.AddWithValue("?Telefone1", empresaVO.telefone1);
            cmd.Parameters.AddWithValue("?Telefone2", empresaVO.telefone2);
            cmd.Parameters.AddWithValue("?Telefone3", empresaVO.telefone3);
            cmd.Parameters.AddWithValue("?Ativo", empresaVO.ativo);
            cmd.Parameters.AddWithValue("?Contato", empresaVO.contato);
            cmd.Parameters.AddWithValue("?Responsavel", empresaVO.responsavel);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newEmpresa(EmpresaVO empresaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO empresa ");
            query.AppendLine("SET CNPJ=?CNPJ, IE=?IE, IM=?IM, Nome=?Nome, NomeTicket=?NomeTicket, Endereco=?Endereco, EnderecoNumero=?EnderecoNumero, Complemento=?Complemento, Bairro=?Bairro, Cidade=?Cidade, UF=?UF, Pais=?Pais, SMS=?SMS, Email=?Email, Telefone1=?Telefone1, Telefone2=?Telefone2, Telefone3=?Telefone3, Ativo=?Ativo, Contato=?Contato, Responsavel=?Responsavel ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?CNPJ", empresaVO.CNPJ);
            cmd.Parameters.AddWithValue("?IE", empresaVO.IE);
            cmd.Parameters.AddWithValue("?IM", empresaVO.IM);
            cmd.Parameters.AddWithValue("?Nome", empresaVO.nome);
            cmd.Parameters.AddWithValue("?NomeTicket", empresaVO.nomeTicket);
            cmd.Parameters.AddWithValue("?Endereco", empresaVO.endereco);
            cmd.Parameters.AddWithValue("?EnderecoNumero", empresaVO.enderecoNumero);
            cmd.Parameters.AddWithValue("?Complemento", empresaVO.complemento);
            cmd.Parameters.AddWithValue("?Bairro", empresaVO.bairro);
            cmd.Parameters.AddWithValue("?Cidade", empresaVO.cidade);
            cmd.Parameters.AddWithValue("?UF", empresaVO.UF);
            cmd.Parameters.AddWithValue("?Pais", empresaVO.pais);
            cmd.Parameters.AddWithValue("?SMS", empresaVO.SMS);
            cmd.Parameters.AddWithValue("?Email", empresaVO.email);
            cmd.Parameters.AddWithValue("?Telefone1", empresaVO.telefone1);
            cmd.Parameters.AddWithValue("?Telefone2", empresaVO.telefone2);
            cmd.Parameters.AddWithValue("?Telefone3", empresaVO.telefone3);
            cmd.Parameters.AddWithValue("?Ativo", empresaVO.ativo);
            cmd.Parameters.AddWithValue("?Contato", empresaVO.contato);
            cmd.Parameters.AddWithValue("?Responsavel", empresaVO.responsavel);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delEmpresa(EmpresaVO empresaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM empresa ");
            query.AppendLine("WHERE IdEmpresa=?IdEmpresa ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdEmpresa", empresaVO.idEmpresa);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
